﻿using Microsoft.Practices.Unity;
using MusicManager.BL;
using MusicManager.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace MusicManager.Azure
{
    // HINWEIS: Mit dem Befehl "Umbenennen" im Menü "Umgestalten" können Sie den Klassennamen "MusicService" sowohl im Code als auch in der SVC- und der Konfigurationsdatei ändern.
    // HINWEIS: Wählen Sie zum Starten des WCF-Testclients zum Testen dieses Diensts MusicService.svc oder MusicService.svc.cs im Projektmappen-Explorer aus, und starten Sie das Debuggen.
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    public class MusicService : IMusic, IUser
    {
      [Dependency]
        public IMusicManagerBL Logic { get; set; }

        public MusicService()
        {

        }

        #region IMusic Members

        //IEnumerable<DomainModel.Music> IMusic.FindAll()
        //{
        //    throw new NotImplementedException();
        //}

        public IEnumerable<DomainModel.Music> FindAllForToken(string token)
        {
            return Logic.GetPlaylistFull(token);
        }

        public DomainModel.Music FindByTokenAndName(string token, string name)
        {
            return Logic.GetMusic(name, token);
        }

        public bool InsertMusic(DomainModel.Music music, string token)
        {
            return Logic.AddMusic(music.Name, music.Song, token);
        }
        #endregion

        #region IUser Member
        public IEnumerable<DomainModel.User> FindByNameLike(string name)
        {
            return Logic.GetUserByNameLike(name);
        }

        public IEnumerable<DomainModel.User> FindAll()
        {
            return Logic.GetUserList();
        }

        public bool InsertUser(DomainModel.User user)
        {
            return Logic.CreateUser(user.Id, user.Name, user.Password);
        }
        #endregion


        public bool Login(string name, string password, out string token)
        {
            return Logic.Login(name, password, out token);
        }

        public bool Logout(string name, string token)
        {
            return Logic.Logout(name, token);
        }
    }
}
